package com.cax.common.domain.base.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @Description: 图表series对象 支持折线图、柱状图
 * @author: liangjian
 * @created: 2021年12月30日16:15:56
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel(value = "EchartsSeriesVO", description = "图表series对象 支持折线图、柱状图")
public class EchartsSeriesVO {

    public EchartsSeriesVO(String name, String type, List<BigDecimal> data){
        this.name = name;
        this.type = type;
        this.data = data;
    }

    @ApiModelProperty(value="名称")
    @JsonProperty("name")
    private String name;

    @ApiModelProperty(value="图表类型 line折线 bar柱状")
    @JsonProperty("type")
    private String type;

    @ApiModelProperty(value="y轴数据值")
    @JsonProperty("data")
    private List<BigDecimal> data;


    /**
     *  获取图表series对象
     * @param xAxis x坐标
     * @param valMap 值
     * @param name 名称
     * @param type 类型
     * @return EchartsSeriesVO
     */
    public static EchartsSeriesVO getEchartsSeriesVO(List<String> xAxis, Map<String,String> valMap,
                                               String name,String type) {
        List<BigDecimal> values = new ArrayList<>(xAxis.size());
        for (String x : xAxis) {
            values.add(new BigDecimal(valMap.getOrDefault(x, "0")));
        }
        return new EchartsSeriesVO().setName(name).setType(type).setData(values);
    }


    @Getter
    public enum TypeEnum {
        /**
         * 图表类型
         */
        LINE("line", "折线"),
        BAR("bar", "柱状");

        /**
         * code
         */
        private String code;
        /**
         * name
         */
        private String name;

        TypeEnum(String code, String name) {
            this.code = code;
            this.name = name;
        }

    }
}
